"""
主题: 通过XML-RPC实现简单的远程调用
问题: 你想找到一个简单的方式去执行运行在远程机器上面的Python程序中的函数或方法。
提示 : 
   XML-RPC的一个缺点是它的性能。SimpleXMLRPCServer 的实现是单线程的， 所以它不适合于大型程序
"""

from xmlrpc.server import SimpleXMLRPCServer

class KeyValueServer:
    '''实现了键-值存储功能的简单服务器'''
    _rpc_methods_ = ['get', 'set', 'delete', 'exists', 'keys']
    def __init__(self, address):
        self._data = {}
        self._serv = SimpleXMLRPCServer(address, allow_none=True)
        for name in self._rpc_methods_:
            self._serv.register_function(getattr(self, name))

    def get(self, name):
        return self._data[name]

    def set(self, name, value):
        self._data[name] = value

    def delete(self, name):
        del self._data[name]

    def exists(self, name):
        return name in self._data

    def keys(self):
        return list(self._data)

    def serve_forever(self):
        self._serv.serve_forever()

# Example
if __name__ == '__main__':
    kvserv = KeyValueServer(('', 20001))
    kvserv.serve_forever()